package com.github.cyf.desensition;

import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 脱敏注解
 * @author chenyifan
 * @create 2024-05-08 21:16
 */
@Retention(RetentionPolicy.RUNTIME) // 运行时生效
@Target(ElementType.FIELD) // 用在字段上
// 主要用于简化 JSON 序列化和反序列化的配置过程，一般用于将其他的 Jaskson 注解打包成"组合"注解
// 当你在一个类或属性上使用了带有 @JacksonAnnotationsInside 的自定义注解时，该自定义注解里包含的所有 Jackson 注解都会直接应用到目标类或属性上
@JacksonAnnotationsInside
// 用于指定在序列化时应该使用哪个自定义序列化器类
@JsonSerialize(using = DesensitizedInfoSerializer.class)
public @interface Desensitization {

    /**
     * 数据脱敏类型
     * 当脱敏类型为 CUSTOM 时，才需要填写 start 和 end
     */
    DesensitizedType type();

    /**
     * 脱敏开始位置（包含）
     */
    int startInclude() default 0;

    /**
     * 脱敏结束位置（不包含）
     */
    int endExclude() default 0;
}
